package com.hzh.scala
object Demo7Class {
  def main(args: Array[String]): Unit = {
    //创建类的对象
    val student = new Student("001", "张三")
    student.print()
    val lisi = new Student("002", "李四", 24)
    lisi.print()
    println(lisi.toString)
    /**
     * 多态
     * 父类的引用指向子类的对象
     *
     */
    val obj: Object = new Student("003", "王五", 24)
    println(obj)
    /**
     * 在类中可以定义，属性，方法，构造函数
     * 默认构造函数：{}是scala默认构造函数的代码块,默认构造函数可以有参数
     *
     * scala的类同样是Object的子类
     */
  }
  class Student(id:String,name:String){
    println("默认的构造函数")
    /**
     * 类的属性
     */
    val _id: String= id
    val _name: String = name
    //下划线代码占位符，相当于给一个默认值
    var _age: Int = _
    /**
     * 重载构造函数
     * 在重载构造函数的第一行需要手动调用默认构造函数
     */
    def this(id: String, name: String, age: Int) {
      //调用默认构造函数
      this(id, name)

      //给属性赋值
      this._age = age
    }
    /**
     * 在类中定义方法
     *
     */
    def print(): Unit = {
      println(s"student(id:${_id},name:${_name},age:${_age})")
    }
    /**
     * 重写父类的方法
     *
     */
    override def toString: String = s"student(id:${_id},name:${_name},age:${_age})"
  }
}
